Variables declared with var
have the special property that regardless of where they’re declared in a function they "float" to the top
of the function and are available for use even before they’re declared. That makes scoping confusing, especially for new coders.
To keep confusion to a minimum, var
declarations should happen before they are used for the first time.
Noncompliant code example
var x = 1;
function fun(){
alert(x); // Noncompliant as x is declared later in the same scope
if(something) {
var x = 42; // Declaration in function scope (not block scope!) shadows global variable
}
}
fun(); // Unexpectedly alerts "undefined" instead of "1"
Compliant solution
var x = 1;
function fun() {
print(x);
if (something) {
x = 42;
}
}
fun(); // Print "1"